<!DOCTYPE HTML>
<script src="../../resources/js-test.js"></script>
<style>
:-webkit-any(h1),
:-webkit-any( #div1, b ),
:-webkit-any(.foo, #bar),
:-webkit-any(i,p,:link,span:focus) {
    background-color: blue;
}

#test-last-child :-webkit-any(:last-child),
:-webkit-any(:link:focus),
#container-div :-webkit-any(:link, :not(a)),
h1:-webkit-any(.h1class, #bar) {
    background-color: green;
}

/* Only simple selectors should work. */
:-webkit-any() {
    background-color: red;
}

:-webkit-any(s,:nonexistentpseudo) {
    background-color: red;
}

div~q {
    background-color: blue;
}
:-webkit-any(div ~ q) {
    background-color: red;
}
:-webkit-any(div~q) {
    background-color: red;
}

q+q {
    background-color: blue;
}
:-webkit-any(q+q) {
    background-color: red;
}

q>span {
    background-color: blue;
}
:-webkit-any(q>span) {
    background-color: red;
}

div span {
    background-color: blue;
}
:-webkit-any(div span) {
    background-color: red;
}
:-webkit-any( div span ) {
    background-color: red;
}
</style>
This page tests :-webkit-any. This window needs to be focused for the :focus tests to pass.<br>
<h1>h1</h1>
<h1 class="h1class">h1</h1>
<div id="div1">div</div>
<div>foo</div>
<b>b</b>
<i>i</i>
<p>p</p>
<a href="http://webkit.org">a</a>
<span id="span1">span<span>
<li class="foo">li</li>
<u id="bar">u</u>
<s>s</s>
<div id="container-div"><input type='text'><a href='http://www.example.com/'></a><div></div><a name='foo'></div>
<div><span>div span</span></div>
<q>div~q</q>
<q>q+q</q>
<q><span>q>span</span></q>
<div id="test-last-child"><p>first</p><p>last</p></div>
<pre id="console"></pre>

<script>
if (window.testRunner)
    testRunner.dumpAsText();

function assertColor(selectorOrElement, rbgColor)
{
    debug("");

    if (typeof selectorOrElement == "string") {
        debug(selectorOrElement);
        element = document.querySelector(selectorOrElement);
    } else {
        debug("Element: " + element.nodeName);
        element = selectorOrElement;
    }

    shouldBe("document.defaultView.getComputedStyle(element, null).getPropertyValue('background-color')", rbgColor);
}

function assertBlue(selectorOrElement)
{
    assertColor(selectorOrElement, "'rgb(0, 0, 255)'")
}

function assertWhite(selectorOrElement)
{
    assertColor(selectorOrElement, "'rgba(0, 0, 0, 0)'")
}

function assertGreen(selectorOrElement)
{
    assertColor(selectorOrElement, "'rgb(0, 128, 0)'")
}

function focus(selector)
{
    var element = document.querySelector(selector);
    element.tabIndex = -1;
    element.focus();
}

assertBlue("h1");
assertBlue("#div1");

// Ensure the div with ID after the first div does not share a ComputedStyle with the first div.
assertWhite(document.querySelectorAll("div")[1]);

assertBlue("b");
assertBlue("i");
assertBlue("p");

assertWhite("#span1");
focus("#span1");
assertBlue("span:focus");

assertBlue("a");
focus("a");
assertGreen("a:focus");

assertBlue(".foo");
assertBlue("#bar");

assertGreen("h1.h1class");

debug("");
shouldBe("document.querySelectorAll('#container-div :-webkit-any([href],input[type],input[name])').length", "2");
shouldBe("document.querySelectorAll('#container-div :-webkit-any(div,a):-webkit-any([type],[href],[name])').length", "2");
shouldBe("document.querySelectorAll('#container-div :-webkit-any(:link, :not(a))').length", "3");
assertGreen("#container-div input");
assertGreen("#container-div a[href]");
assertGreen("#container-div div");
assertWhite("#container-div a[name]");

assertWhite("s");
assertBlue("div span");
assertBlue("div ~ q");
assertBlue("q+q");
assertBlue("q>span");

assertBlue("#test-last-child :first-child");
assertGreen("#test-last-child :last-child");
</script>
